htaccess 单参数重写规则

Posted

技术标签:

【中文标题】htaccess 单参数重写规则【英文标题】:htaccess rewrite rule with single parameter 【发布时间】:2016-08-01 06:57:16 【问题描述】:

当用户输入网址时

http://example.com/app/abcd123/

我想显示他的页面

http://example.com/app/index.php?param=abcd123

无需更改浏览器中的 URL。

我把 .htaccess 文件放在 app 文件夹中,里面有代码

RewriteEngine on
RewriteCond %REQUEST_URI ^/index.php [NC]
RewriteCond %QUERY_STRING ^param=(.*)
RewriteRule (.*) http://example.com/app/%1? [R=301,L]

【问题讨论】:

/app/ 是一个真实的目录吗? 是的,我把我的 htaccess 文件放在那里 【参考方案1】:

您可以在/app/.htaccess使用此代码:

RewriteEngine on
RewriteBase /app/

# external redirect from actual URL to pretty one
RewriteCond %THE_REQUEST /index\.php\?param=([^\s&]+) [NC]
RewriteRule ^ %1? [R=302,L,NE]

# internal forward from pretty URL to actual one
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^(.+?)/?$ index.php?param=$1 [L,QSA]

【讨论】:

哇双方重定向(外部到内部和内部到外部),这是一个很好的解决方案,感谢分享先生的欢呼。【参考方案2】:

试试这个.htaccess 代码。它应该可以帮助你。

确保重写基础应该是您当前目录的根目录。

RewriteBase /app/

RewriteEngine On

RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-s
RewriteRule ^(.*)$ index.php?param=$1 [QSA,NC,L]

RewriteCond %REQUEST_FILENAME -d
RewriteRule ^(.*)$ index.php [QSA,NC,L]

RewriteCond %REQUEST_FILENAME -s
RewriteRule ^(.*)$ index.php [QSA,NC,L] 

在这种情况下,如果用户输入http://example.com/app/qwerty,则调用将被处理为http://example.com/app/index.php?params=qwerty

这应该可以工作,我测试过。如果您遇到任何麻烦,请告诉我。

【讨论】:

谢谢 - 代码有效,我面临的唯一问题是我的字体停止加载,因为它们也在这个文件夹中并且有类似“/app/fonts/font.ttf?ver=”的链接1.4.4" @moonvader,anubhava 的答案非常适合您的情况。【参考方案3】:
RewriteEngine On
RewriteBase /app
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php?param=$1 [L]

在那里查看:http://htaccess.mwl.be/ 或其他在线 htaccess 测试服务

【讨论】:

以上是关于htaccess 单参数重写规则的主要内容,如果未能解决你的问题,请参考以下文章

htaccess 多参数重写规则

。htaccess重写条件/规则并隐藏url参数

带有可选参数的nginx和htaccess重写规则

htaccess重写规则,带有unicode字母的参数

无法在 .htaccess 中为我的 php 网站编写重写规则

.htaccess 可以使用 3 个相同的参数吗?