【发布时间】:2013-09-06 03:33:16
【问题描述】:
我正在尝试替换问号和等号,以便可以使用如下 URL:
http://www.mydomain.com/categories/id/23/name/category-name
上面的 url 将被内部重定向到 http://www.mydomain.com/categories?id=23&name=category-name
我正在使用这个 .htaccess:
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
# external redirect from /view.php?id=1 to /view/id/1
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+([^.]+)\.php\?([^=]+)=([^\s&]+) [NC]
RewriteRule ^ /%1/%2/%3? [L,R=301]
# internal forward from /view/id/1 to /view.php?id=1
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /$1.php?$2=$3 [L,QSA]
但它没有按预期工作。当我转到 http://www.mydomain.com/categories/id/23/name/category-name 时,我收到 500 内部服务器错误。为什么?我做错了什么?
更新代码
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?(.*)$ $1/$2=$3&$4 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^/]+)/([^/]+)$ $1.php?$2 [L,QSA]
【问题讨论】:
-
查看 webservers error.log 以了解该 500 的详细信息。
-
你的 apache 错误日志是怎么说的?
-
它说“由于可能的配置错误,请求超出了 10 个内部重定向的限制。如有必要,使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”来获得回溯。好像我有一个无限循环?
-
你的 htaccess 文件在哪里?
-
即使没有错误,
http://www.mydomain.com/categories/id/23/name/category-name也永远不会匹配,因为您将模式限制为只有 3 个/和一个可选的。所以它最多只能匹配http://www.mydomain.com/categories/id/23/,然后当你重写你的第一条规则时很可能会循环到死。
标签: php apache .htaccess url url-rewriting