我如何使用 .htaccess 清理 php 生成的 url
Posted
技术标签:
【中文标题】我如何使用 .htaccess 清理 php 生成的 url【英文标题】:How do i use .htaccess to clean a url generated by php 【发布时间】:2018-04-17 10:01:12 【问题描述】:我有以下网址:
http://www.example.com/item?title=titlename&id=5 and
http://www.example.com/page?title=titlename
我想将它们转换为:
http://www.example.com/item/titlename/5
http://www.example.com/page/titlename
注意:页面和项目是文件(即:item.php 和 page.php),我可以使用以下代码删除 .php 扩展名:
RewriteCond %THE_REQUEST ^[A-Z]3,\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]
我们将不胜感激。
【问题讨论】:
您是否已经“清理”了您在应用程序中发布的 URL? ***.com/questions/6940644/… 和 ***.com/questions/20563772/… 的可能重复 不,我还没有清理它,我需要帮助来清理它,请问有什么帮助吗? 嗯,“修复”显示给用户(在您的应用程序中)的 URL 是您必须做的第一件事。你不会在.htaccess
中这样做。然后,您使用.htaccess
将“干净”的 URL在内部重写回您的应用程序可以理解的“真实”URL。
应用程序运行良好,我只是想在内部将 url 从 example.com/item?title=titlename&id=5 和 example.com/page?title=titlename 重写为类似这样的内容:example.com/item/titlename/5 example.com/page/titlename
【参考方案1】:
我只是想在内部将 URL 从
http://www.example.com/item?title=titlename&id=5
和http://www.example.com/page?title=titlename
改写成这样的:http://www.example.com/item/titlename/5
或http://www.example.com/page/titlename
。
这应该是相反的方式...... 内部重写从http://www.example.com/item/titlename/5
到http://www.example.com/item?title=titlename&id=5
。并且大概您应该在目标 URL 上包含 .php
扩展名? (不要依赖另一个指令来附加文件扩展名。)
尝试以下方法:
Options -MultiViews
RewriteEngine On
RewriteRule ^([a-z]+)/([\w-]+)(?:/(\d+))?$ /$1.php?title=$2&id=$3 [L]
这将处理带有和不带有尾随 ID 的 URL(例如 /5
)。但是,如果您指定格式为 /item/titlename
的 URL(即没有数字 id),那么您自然会得到一个空的 id
URL 参数传递给您的脚本。
请注意,必须禁用 MultiViews
才能使其正常工作,否则 mod_negotiation 将在 mod_rewrite 之前将 URL 从 item
重写为 item.php
(例如),您将无法获得传递的 URL 参数。
如果您特别需要检查目标文件,例如。 page.php
在重写之前存在,那么您可以包含一个附加条件来检查这一点。但是,我不认为这是必要的,因为无论如何您都会得到 404,并且检查文件是否存在相对昂贵。
Options -MultiViews
RewriteEngine On
RewriteCond %DOCUMENT_ROOT/$1.php -f
RewriteRule ^([a-z]+)/([\w-]+)(?:/(\d+))?$ /$1.php?title=$2&id=$3 [L]
这假定您的文件存在于您网站的文档根目录中。
澄清一下,如 cmets 中所述,您应该已经在应用程序中链接到 http://www.example.com/item/titlename/5
形式的 URL。
【讨论】:
这是一个很大的努力,但它对我不起作用。以上是关于我如何使用 .htaccess 清理 php 生成的 url的主要内容,如果未能解决你的问题,请参考以下文章
htaccess 无法将文章 ID 重定向到使用 php slug 函数生成的文章 slug
如何使用 htaccess 在 nginx 的子文件夹中运行 index.php?
如何修复跨站点脚本(XSS)?我们可以使用 .htaccess 修复吗