【发布时间】:2017-06-20 08:31:59
【问题描述】:
我的默认网址是http://www.example.com/?page=20&id=2,我想用.htaccess 将其显示为http://www.example.com/page/20/id/2/
我使用以下代码;
<IfModule mod_rewrite.c>
Options +FollowSymLinks +Indexes -MultiViews
RewriteEngine on
RewriteBase /
DirectoryIndex index.php
RewriteRule page/(.*)/id/(.*)/?$ ?page=$1&id=$2 [R=301,NE,NC,L]
RewriteRule page/(.*)/?$ ?page=$1 [R=301,NE,NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /
</IfModule>
如果我在代码末尾删除 [R=301,NE,NC,L],则 /page/20/id/2/ 如果我直接去但当我写为 ?page=20&id=2 时工作, url 在浏览器上没有改变。
如果我像上面那样使用它,它会从 /page/20/id/2/ 重定向到 ?page=20&id=2 ,这与我尝试做的相反。
如果有人可以帮助我,我将不胜感激。
谢谢。
【问题讨论】:
-
请注意,这通常不是人们创建“漂亮 URL”的方式。您仍在引用变量名称,这很好,但并不是真正需要,因此您可以将您的 URL 设置为 .com/20/2,但当然这都是美观的,所以这取决于您。
-
尝试将 RewriteRule
page/(.*)/id/(.*)/?$更改为RewriteRule ^page/(.*)/id/(.*)/?$看看是否有帮助 -
/pages 或 /id 可以更改,主要问题是我无法重定向 url。无论如何感谢您的建议。
-
“但是当我写成 ?page=20&id=2 时,浏览器上的 url 没有改变” - 这主要是因为你没有做任何事情 到目前为止,这将实现这一目标... // 只有在存在无法更改的外部链接时,您才需要这样做。您将系统本身输出的所有链接更改为您想要的 HTML 输出中的“漂亮”表单,这一点很清楚,对吧?
-
@GiovanniLeGrand 它没有帮助,因为 RewriteRule 只检查 URL 的 path 组件。如果你想根据查询字符串的内容做任何事情,你需要一个使用相应变量的 RewriteCond 来做到这一点。
标签: php apache .htaccess redirect mod-rewrite