.htaccess 为子文件夹中的 PHP 页面重写漂亮的 URL?
Posted
技术标签:
【中文标题】.htaccess 为子文件夹中的 PHP 页面重写漂亮的 URL?【英文标题】:.htaccess Pretty URL rewrite for PHP pages in a subfolder? 【发布时间】:2012-03-04 23:38:00 【问题描述】:我有以下目录设置:
http://www.mysite.com/public/
我正在使用以下重写从可见 URL 中删除“公共”文件夹:
#rewrite the URL to display the subdirectory as the main directory for all links
RewriteCond %HTTP_HOST ^(www\.)?mysite\.com
RewriteCond %REQUEST_URI !^/public
Rewriterule ^(.*)$ /public/$1 [L]
这很好用,并且可以正确重定向所有内容。但是,我也想重写一些位于“public”子文件夹中的动态页面,但是我发现任何重写都无法与上述规则结合使用。
例如,使用上面的子目录重写规则,转到如下 URL:
http://www.mysite.com/item.php?id=1&name=item_name
...应该改写为:
http://www.mysite.com/items/item_name
想法?
【问题讨论】:
【参考方案1】:Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteBase /
#rewrite the URL to display the subdirectory as the main directory for all links
RewriteCond %HTTP_HOST ^(www\.)?mysite\.com$ [NC]
Rewriterule ^(?!public/|prints/)(.*)$ /public/$1 [L,NC]
RewriteCond %THE_REQUEST /*item\.php\?id=([^&]*)&name=([^&]*)\s [NC]
Rewriterule ^ /prints/%1/%2? [R,L,NC]
Rewriterule ^prints/([^/]*)/([^/]*)/?$ public/item.php?id=$1&name=$2 [L,NC,QSA]
PS:请确保您的静态包括如 css、js、图像等具有绝对路径而不是相对路径。
【讨论】:
该语法似乎很接近,但与原始规则一起,它仍然没有重写 URL。它仍然以完整的http://www.mysite.com/item.php?id=1&name=item_name
格式出现。我需要在子文件夹“public”中放置一个单独的 .htaccess 文件吗?
不应该都在同一个 .htaccess 文件中。你现在可以试试我编辑的代码吗?
啊,我忽略了另一个事实,请再检查一遍。
还是不行。我仍然需要将子文件夹到根重写规则的原始 3 行与实际的 PHP URL 重写一起工作......
嗯这次我已经测试好了。看起来其他一些相互冲突的规则正在产生问题。您可以在此处发布 access.log 或 error.log 匹配条目吗?以上是关于.htaccess 为子文件夹中的 PHP 页面重写漂亮的 URL?的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess 不重定向到 404.php 而是显示页面名称
.htaccess - 将所有 URL + 现有目录重定向到 index.php