我遇到了使用.htaccess文件来重写我的网址而没有.php的问题。它适用于某些地址,但不适用于其他地址。这是我的.htaccess文件中的内容..
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/$ $1.php
#rewrite url up to 3 levels
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/$2/$3.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
我的网站上有以下文件夹/文件结构..
index.php
about-us
index.php
careers.php
our-work
index.php
test.php
client1
example.php
以下网址有效..
example.com
example.com/about-us
example.com/our-work
example.com/our-work/client1/example
但这些不起作用..
example.com/our-work/test
example.com/about-us/careers
我刚收到404错误。
知道为什么会这样吗?
答案 0 :(得分:1)
您没有2级规则,只有1级和3级规则。你应该添加:
#rewrite url to 2 levels
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
你应该在你的3级规则前加上RewriteCond条件:
#rewrite url to 3 levels
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/$2/$3.php
如果存在具有相同名称的目录或者PHP文件不存在,这将阻止调用规则。