清理url mod重写500错误

时间:2010-01-25 05:04:08

标签: .htaccess mod-rewrite rest

感谢所有帮助我完成清洁网址任务的人。我差不多了,但是想要舔这最后一件事。

的.htaccess

RewriteEngine on

#REMOVE THIS LINE ON SITE LAUNCH!
RewriteBase /~accountName/

#Hide .php extensions for cleaner URLS
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

#calendar-expanded REST-ful URLs
RewriteRule ^calendar-expanded(/.*)?$ calendar-expanded.php$1 [L]

Options All -Indexes

<IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
</IfModule>

# propagate php.ini file to all sub-directories
suPHP_ConfigPath /home/accountName/public_html/php.ini

我的工作网址

www.example.com/calendar-expanded/4/mother-mother-in-concert/

一个破碎的网址

www.example.com/calendar/12/another-band-live/

calendar/显然没有mod重写。我的问题是,如果有人不小心浏览了错误的页面,我是否绝对需要每个页面都有一个规则来避免内部服务器错误?破碎的网址就是一个例子。我真的很喜欢浏览器返回404错误。

我正在寻找一个涵盖除calendar-expanded之外的所有其他网址的cond /规则。这可行吗?

感谢。 (@Gumbo我希望你朝着你的方向前进!)

2 个答案:

答案 0 :(得分:2)

我可以重建这种行为并将其追溯到这种情况:

RewriteCond %{REQUEST_FILENAME}\.php -f

此处 REQUEST_FILENAME 仅包含同一目录中calendar的文件系统路径。附加.php的是现有文件,因此条件为真。但$1确实包含现已附加.php的完整请求的网址路径。这种情况一直持续到内部计数器超过其限制为止。

解决方法是在替换中使用%{REQUEST_FILENAME}.php

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php

答案 1 :(得分:0)

您可以创建一个匹配所有内容的规则,并将其放在底部吗?重写引擎优先于基于它们在.htaccess文件中出现的顺序的规则。