在内部重定向网址但保留输入的网址

时间:2015-01-17 14:47:01

标签: .htaccess rewrite

我有以下代码:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^p/(.*)$ /p.php?id=$1 [R=301,L]

从功能上讲,上面的代码可行。但网址从p/X更改为p.php?id=X。我怀疑问题在于[]之间的值,我尝试了不同的值,在同一个对象上观察其他问题,但没有运气。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

删除R标志,因为这会导致浏览器中的外部重定向。

Options +FollowSymLinks -MultiViews
RewriteEngine On

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

RewriteRule ^p/(.+)$ /p.php?id=$1 [NC,QSA,L]

另请注意禁用MultiViews选项。在MultiViews之前运行的Apache's content negotiation module使用选项mod_rewrite,并使Apache服务器匹配文件扩展名。因此/file可以在网址中,但它会投放/file.php

还添加了QSA标志。 QSA(查询字符串追加)标志在添加新查询参数时保留现有查询参数。

参考文献: