我想将查询参数重写为使用.htaccess分隔的斜杠
重写示例
http:www.site.com/user/comfirm/index.php?confirm=x22xx22xxx
要
http:www.site.com/user/comfirm/x22xx22xxx
要做到这一点,我正在尝试这种方式
RewriteRule ^/user/confirm/([^A-Za-z0-9])$ /user/confirm/index.php?confirm=$1 [L, QSA]
但它显示内部服务器错误。
还尝试了一些变体,例如将/user/
更改为user/
,并且喜欢这样。
RewriteRule ^/user/confirm/(.*)/$ /user/confirm/index.php?confirm=$1 [L]
但显示404错误
请参阅并建议任何可行的方法。
答案 0 :(得分:1)
有两个问题:
删除标记中的空格:[L,QSA]
模式也错了,试试这个:
RewriteRule ^/user/confirm/([^A-Za-z0-9])$ /user/confirm/index.php?confirm=$1 [L,QSA]
调试htaccess问题的一种简单方法是检查您的Web服务器(Apache)日志,常见的error_log或errors.log,具体取决于您的设置。
答案 1 :(得分:1)
试试这段代码:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteRule ^user/confirm/([^/]+)/?$ /user/confirm/index.php?confirm=$1 [L,NC,QSA]
如果不起作用,请在您的问题中发布完整的.htaccess。
编辑:建议.htaccess:
Options +FollowSymlinks-MultiViews
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^user/confirm/([^/]+)/?$ /user/confirm/index.php?confirm=$1 [L,QSA,NC]
RewriteRule ^sitemap\.xml$ sitemap.php [L]
RewriteRule ^rss/(.+?)\.xml$ rss/$1.php [L]
RewriteRule ^([^/]*)/(.+?\.html)$ /software/?pflink=$1&pagelink=$2 [L,QSA,NC]
</IfModule>
答案 2 :(得分:0)
我通过从root .htaccess
中删除此重写规则解决了这个问题RewriteRule ^/user/confirm/([^A-Za-z0-9])$ /user/confirm/index.php?confirm=$1 [L,QSA]
将另一个.htaccess
文件放在confirm
目录中以隐藏index.php并使用以下代码处理查询参数。
Options +FollowSymlinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?confirm=$1 [L]
</IfModule>
现在它的工作。希望这也能帮助其他人解决同样的问题。