htaccess规则适用于一台服务器而不是另一台服务器

时间:2014-08-01 22:06:28

标签: regex apache .htaccess mod-rewrite

在我的本地服务器上,我有一个包含以下规则的.htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?!menu/)([^\.]+)$ $1.php [NC,L]
RewriteRule ^menu/([^\.]+)$ item.php?url=$1 [NC,L]

它适用于我的计算机上的服务器,但规则在我的公共测试服务器上不起作用。我的电脑是mac mini,我正在使用MAMP。测试服务器是MAC OS X Server版本10.8.5。此外,我知道.htaccess文件已启用并正在测试服务器上运行。

测试服务器上的问题是它没有识别网址中的菜单/。它会识别菜单,但不会识别末尾的斜线。我想要做的是获得一个看起来像/ menu / soft-taco重定向到item.php的网址?url = soft-taco。

1 个答案:

答案 0 :(得分:1)

在两个规则中添加一个尾随的可选斜杠,并尝试颠倒规则的顺序:

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteRule ^menu/([^/.]+)/?$ item.php?url=$1 [NC,L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)/?$ $1.php [L]