代码之家  ›  专栏  ›  技术社区  ›  jay

500清除url mod重新写入错误

  •  0
  • jay  · 技术社区  · 15 年前

    感谢所有帮助过我的干净的网址搜索的人。我快到了,但我想舔最后一块。

    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/

    没有重新写入的mod calendar/ 很明显。我的问题是,如果有人不小心浏览到了错误的页面,我真的需要为每个页面都制定一个规则来避免内部服务器错误吗?断开的URL就是一个例子。我非常希望浏览器返回404错误。

    我正在寻找一个条件/规则,将涵盖“所有其他”的网址,除了 calendar-expanded . 这可行吗?

    谢谢。(@gumbo我很有希望看到你的方向!)

    2 回复  |  直到 15 年前
        1
  •  2
  •   Gumbo    15 年前

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

    RewriteCond %{REQUEST_FILENAME}\.php -f
    

    在这里 请求文件名 只包含文件系统路径 calendar 在同一目录中。以及附加的 .php 是现有文件,因此条件为真。但是 $1 是否包含现在附加的完整请求的URL路径 php .这将一直重复,直到内部计数器超过其限制。

    解决这个问题的办法是 %{REQUEST_FILENAME}.php 在替代方案中:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^ %{REQUEST_FILENAME}.php
    
        2
  •  0
  •   Nathan Osman    15 年前

    你能创建一个匹配所有内容的规则并将其放在底部吗?重写引擎根据规则在.htaccess文件中的显示顺序优先于它们。