htaccess重写在某些页面中不起作用

时间:2016-08-03 22:00:31

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

.htaccess文件:

我有以下htaccess文件(它很短):

RewriteEngine on
Options +FollowSymLinks
RewriteBase /

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_]+)/?$ index.php?page=$1 [L]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_]+)/(.+)/?$ index.php?page=$1&params=$2 [L]

我认为很容易理解:如果文件不存在,那么网址会被重写。

问题:

"错误"文件夹或文件不存在,因此应该重新编辑。但是,当我尝试访问url.local/error/404时,url.local/error无效。

Apache可能有问题吗?

修改

要点:

  • http://url.local/dir正常工作
  • http://url.local/dir/subdir正常工作
  • http://url.local/dir/subdir/subdir正常工作
  • http://url.local/error正常工作
  • http://url.local/error/subdir 没有效果

1 个答案:

答案 0 :(得分:1)

  

Apache可能有问题吗?

没有Apache问题。问题是您的正则表达式与/不匹配,但您的输入有一个。

这样做:

RewriteEngine on
Options +FollowSymLinks
RewriteBase /

RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^(\w+)/(.+)/?$ index.php?page=$1&params=$2 [L]

RewriteRule ^(.+?)/?$ index.php?page=$1 [L,QSA]