我的htaccess文件有问题。它将页面重定向到root,即index.php
例如:
如果我使用http://domain.com/jobs或domain.com/jobs等网址将其重定向页面发送到www.domain.com/index.php
但如果我使用www.domain.com/jobs,则不会将页面重定向到其他页面。
以下是我使用的htaccess代码
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
</IfModule>
答案 0 :(得分:2)
[L]
标志是Last的快捷方式,它告诉mod_rewrite
在匹配此规则后停止处理规则。
RewriteRule ^ index.php [L]
规则并将您的请求重定向到index.php
,在此之后省略了规则。
解决方案是 - 更改规则的顺序。它应该是这样的:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
它将被重定向到www.domain.com,然后将执行其他规则检查。