感谢所有帮助我完成清洁网址任务的人。我差不多了,但是想要舔这最后一件事。
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我希望你朝着你的方向前进!)
答案 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文件中出现的顺序的规则。