【发布时间】:2012-01-23 21:28:15
【问题描述】:
这需要一点解释,所以我希望我不会在这里失去所有人。
我需要得到类似以下的东西:
http://example.com/results.html?state=iowa&city=davenport
变成:
http://example.com/iowa/davenport/
我能够通过使用这两个重写规则来实现这一点:
RewriteRule ^([A-Za-z0-9-]+)/?$ cities.html?state=$1
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ results.html?state=$1&city=$2
问题在于,在后端有“某处的一些代码”由于第二次重写而被破坏。它与根据另一个选择的结果填写选择框有关(不过我认为这并不重要)。我认为问题在于我对 /state/city 的修改过于广泛。
这是我的完整(为了安全而修改).htaccess 文件的副本:
IndexIgnore *
AddHandler application/x-httpd-php5 .html .htm
RewriteRule ^([A-Za-z0-9-]+)/?$ cities.html?state=$1
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ results.html?state=$1&city=$2
<Files .htaccess>
order allow,deny
deny from all
</Files>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
<IfModule mod_suphp.c>
suPHP_ConfigPath /home/USER
<Files php.ini>
order allow,deny
deny from all
</Files>
它搞砸的代码非常复杂,而且是别人的代码。几个小时后,我无法浏览他们所有的东西,甚至无法接近我可能能够改变的东西以使事情正常进行。
有没有人对我可以做些什么来避免这个问题有任何想法?我真的只有 3 个 .html 文件,我通过这些文件汇集了我的前端代码,所以我尝试了类似
的东西我的重写规则
与仅使用“文件”而不是 filesMatch 相同。我想出的所有东西都会以某种方式破坏其他东西或整个网站。
【问题讨论】:
-
是否可以帮助您将
[L]标志(最后一条规则,不要进一步处理)添加到每个:RewriteRule ^([A-Za-z0-9-]+)/?$ cities.html?state=$1 [L] -
开启重写日志。您正在重写的请求可能非常明显,您不应该这样做。这些是非常广泛的重写规则。
-
@derobert,我尝试按照您的建议打开日志记录,但它给了我 500 内部服务器错误。
-
@ScottRowley:检查你的错误日志——RewriteLog 不应该给你一个 500 错误。
-
@derobert:我跟踪了我的 error_log 并点击了几次刷新,但没有出现任何新内容。
标签: html .htaccess mod-rewrite