Apache Modrewrite在本地主机上工作,但在服务器上不工作

Apache Modrewrite在本地主机上工作,但在服务器上不工作,apache,.htaccess,mod-rewrite,centos,httpd.conf,Apache,.htaccess,Mod Rewrite,Centos,Httpd.conf,这与其说是一个寻求解决方案的问题,不如说是一个寻求澄清的问题 几天前,我在让在本地主机(运行XAMPP)上运行良好的mod_重写在生产服务器(CentOs 6 LAMP stack)上运行时遇到了很多麻烦 重写过程如下所示: 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

这与其说是一个寻求解决方案的问题,不如说是一个寻求澄清的问题

几天前,我在让在本地主机(运行XAMPP)上运行良好的mod_重写在生产服务器(CentOs 6 LAMP stack)上运行时遇到了很多麻烦

重写过程如下所示:

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_重写和服务器架构非常陌生,所以找到解决方案花了我好几个小时。现在,我想知道为什么下面的文章解决了我的问题,因为我真的没有任何线索

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>

选项-索引+多视图+FollowSymLinks
DirectoryIndex.php index.html
允许超越所有
通融

根据规则的上下文,需要或不需要前导斜杠。如果规则位于htaccess文件(或每个目录上下文)中,则不需要前导斜杠。如果规则在server/vhost配置中,则需要一个前导斜杠。如果apache的版本低于v2.2(或2.0,我不记得了),那么您总是需要斜杠

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

RewriteEngine On
RewriteBase /

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

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

很高兴知道这一点,它完美地回答了我的问题。非常感谢。