【问题标题】:Url rewrite with php用php重写网址
【发布时间】:2012-05-25 04:48:39
【问题描述】:

这个 htaccess 有什么问题? 我正在尝试重定向所有带有问号的东西 “www.mysite.com/?bla=bla” 到 "www.mysite.com/router.php?bla=bla

AddDefaultCharset UTF-8
RewriteEngine On
RewriteRule ^([\w]{1,7})$ short.php?p=$1 [L]
RewriteRule ^([\w]+)\.html$ html/$1.html [L]
RewriteRule ^([\w]+)\.php$ php/$1.php [L]
RewriteRule ^\?(.+)$ router.php?$1 [L]

每个规则都有效,除了最后一条,它返回一个:

Forbidden

You don't have permission to access / on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

【问题讨论】:

  • 这是题外话,你的问题与PHP无关。

标签: mod-rewrite url-rewriting url-routing


【解决方案1】:

您无法访问RewriteRule 中的查询字符串。相反,使用RewriteCond 来匹配它。在您拥有的位置使用? 会将其视为正则表达式的特殊字符。

改为使用:

# Prevent redirect loop
# Place above all other rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Non-empty querystring goes to router
RewriteCond %{QUERY_STRING} ^(.+)
# Rewrite to router appending existing querystring (QSA)
RewriteRule ^/?$ router.php [L,QSA]

附录:

防止路由器进入php目录:

RewriteCond %{REQUEST_FILENAME} !^router\.php
RewriteRule ^([\w]+)\.php$ php/$1.php [L]

【讨论】:

  • 重定向有效:问题是它递归地进入第三个语句,它指向 php 文件夹。但是这个 php 文件在根目录中。如何停止我不必递归调用的每个条件?已经在谷歌上搜索了
  • @hysoka44 请参阅上面添加的环路预防。
  • 谢谢迈克尔,但它似乎不起作用。 “预防”部分不应该在所有其他 rewriteurl 之前位于 htaccess 的顶部吗?
  • @hysoka44 是的,应该 - 我认为这是暗示的,抱歉不清楚。
  • 这样也不行,还是进入php文件夹状态。
猜你喜欢
  • 2014-03-09
  • 2011-05-21
  • 2013-09-22
  • 2015-03-14
  • 1970-01-01
  • 2010-10-08
  • 2018-07-31
  • 1970-01-01
相关资源
最近更新 更多