【问题标题】:How do i use .htaccess to clean a url generated by php我如何使用 .htaccess 清理 php 生成的 url
【发布时间】: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]

我们将不胜感激。

【问题讨论】:

标签: php .htaccess url hyperlink


【解决方案1】:

我只是想在内部将 URL 从 http://www.example.com/item?title=titlename&id=5http://www.example.com/page?title=titlename 改写成这样的:http://www.example.com/item/titlename/5http://www.example.com/page/titlename

这应该是相反的方式...... 内部重写http://www.example.com/item/titlename/5http://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。

【讨论】:

  • 这是一个很大的努力,但它对我不起作用。
猜你喜欢
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
相关资源
最近更新 更多