【问题标题】:Modrewrite Works on localhost but not on serverMod_rewrite 适用于本地主机但不适用于服务器
【发布时间】:2014-08-11 11:53:15
【问题描述】:

这不是一个寻求解决方案的问题,而是一个寻求澄清的问题。

几天前,让我的 mod_rewrites 在 localhost(运行 XAMPP)上运行良好,以便在我的生产服务器(CentOs 6 LAMP 堆栈)上运行时遇到了很多麻烦。

重写看起来像这样:

RewriteEngine On
RewriteBase /

RewriteRule ^my/page/([a-zA-Z0-9]+)$ /my/page/$1/
RewriteRule ^my/page/([a-zA-Z0-9]+)/$ /my_page.php?t=$1

在 localhost 上,上述行完美运行并执行了以下操作:

my/page/ab123 --> my_page?t=123

但是,在我的生产服务器上,上述规则无效。一般来说,我对 mod_rewrites 和服务器架构非常陌生,所以找到解决方案花了我几个小时。现在,我很想知道为什么下面解决了我的问题,因为我真的不知道。

RewriteEngine On
RewriteBase /

RewriteRule ^/my/page/([a-zA-Z0-9]+)$ /my/page/$1/
RewriteRule ^/my/page/([a-zA-Z0-9]+)/$ /my_page.php?t=$1

这是一个简单的改变。我必须在页面名称前添加一个正斜杠:^/my/page

我希望能够将我的 htaccess 文件移动到我的服务器,而不必总是添加这个额外的字符。有没有办法解决这个问题?

另外,我的httpd.conf 文件中出现了以下选项

<Directory /my/sites/directory> 
        Options -Indexes +Multiviews +FollowSymLinks
        DirectoryIndex index.php index.html
        AllowOverride All
        Allow from all
</Directory>

【问题讨论】:

    标签: apache .htaccess mod-rewrite centos httpd.conf


    【解决方案1】:

    根据规则的上下文,需要或不需要前导斜杠。如果规则在 htaccess 文件(或每个目录上下文)中,则不需要前导斜杠。如果规则在服务器/虚拟主机配置中,那么您需要一个前导斜杠。如果apache的版本低于v2.2(或者2.0,不记得了),那么你总是需要前导斜杠。

    如果你这样做可能会更好:

    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^/?my/page/([a-zA-Z0-9]+)/?$ /my_page.php?t=$1
    

    这将使前导和尾随斜杠成为可选的。

    【讨论】:

    • 很高兴知道,完美回答了我的问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多