【问题标题】:apache rewrite in .htaccess not working on hosted platform.htaccess 中的 apache 重写在托管平台上不起作用
【发布时间】:2015-04-14 15:32:50
【问题描述】:

我的问题似乎与托管平台上 apache 设置的设置方式直接相关,它由 crazydomains.com 托管。问题是我在我的开发 LAMP 上工作的重写不适用于他们的 LAMP。我希望在重写方面比我有更多知识的人能指出我的错误。

我的开发服务器上的工作重写:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/manage/$ /manage/index.php [L,QSA]
RewriteRule ^/manage/(.+\..+)$ - [NC,L]
RewriteRule ^/manage/(.*)/$ /manage/index.php?page=$1 [L,QSA]
RewriteRule ^/(.+\..+)$ - [NC,L]
RewriteRule ^/(.+)$ /index.php?page=$1 [QSA]

crazydomains 上的问题重写

RewriteEngine On
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^manage/$ /manage/index.php [L,QSA]
RewriteRule ^manage/(.+\..+)$ - [NC,L]
RewriteRule ^manage/(.*)/$ /manage/index.php?page=$1 [L,QSA]
RewriteRule ^(.+\..+)$ - [NC,L]
RewriteRule ^(.+)$ /index.php?page=$1 [QSA]

我希望以http://example.com/managehttp://example.com/manage/ 开头的任何内容都被捕获并转到/manage/index.php,其他任何内容都将转到该站点的根index.php。

我发现在这个托管平台上唯一匹配的规则是规则 4 出于某种原因。当然,他们的支持甚至可以将我链接到网站以生成对我没有帮助的 .htaccess 文件,因为这些都是简单的事情,这是一个复杂的规则。

非常感谢任何帮助!

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    像这样简化你的规则:

    Options +FollowSymLinks
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    
    RewriteRule ^manage/?$ manage/index.php [L,NC]
    
    RewriteRule ^manage/([^.]+)/?$ manage/index.php?page=$1 [L,QSA,NC]
    
    RewriteRule ^([^.]+)/?$ index.php?page=$1 [L,QSA]
    

    【讨论】:

    • 这确实解决了问题,非常感谢,规则现在有效!但是,我仍然对为什么我的原始规则在一台服务器上起作用而在另一台服务器上不起作用而摸不着头脑。非常感谢!
    • 可能是因为RewriteRule ^/ 仅适用于 Apache 配置,但不适用于 .htaccess
    • 啊哈,谢谢指出,没想到!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2020-02-04
    • 2011-01-15
    • 1970-01-01
    • 2016-06-23
    • 2012-04-19
    • 2013-01-25
    相关资源
    最近更新 更多