两个.htaccess规则不相互协作

时间:2013-12-17 12:19:24

标签: php .htaccess

我有以下.htaccess:

RewriteEngine On
RewriteBase /shared/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /shared.php [L]

但我还想删除带有以下内容的.php扩展名:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php

我已经根据其他地方的答案尝试了十几种组合,不仅仅是在StackOverflow上,但仍然无法正确使用,我要么在共享目录中渲染页面无法打开500/404错误,要么在转到/共享时出现500错误。

经过进一步的调查和试验,当我添加删除.php扩展名的规则时,它会混淆第一条规则,即在/ shared /路径下将任何东西路由到shared.php,路径/共享/用户名不是真正的位置但是该脚本确保提供正确的信息。如果URL在路径中具有/ shared /,那么忽略第二条规则会很方便吗?那可能吗?我没有将所有内容重写到/ shared /目录 - 只有当路径读取/ shared / username我希望该规则启动时,其他所有内容都应该重写到/ base目录。

1 个答案:

答案 0 :(得分:2)

保持这样的规则:

RewriteEngine On
RewriteBase /shared/

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /shared.php [L]