我有一个index.php控制器,所有现有文件重定向到的URL都没有。 我目前的.htaccess规则如下:
RewriteEngine On
DirectorySlash Off
# Remove Trailing Slashes
RedirectMatch 302 ^(.*)/$ $1
# Remove WWW
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=302]
# Reroute to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
如果URL中包含index.php,我想要做的是使用301重定向。 但!我无法使用RewriteBase或以斜杠开头的查询,因为我正在开发的webapp可能位于子文件夹中。所以基本上,我只想重写当前目录:
example.com/foo/index.php/bar/whatever应该重定向到example.com/foo/bar/whatever example.com/foo/index/bar/whatever应该重定向到example.com/foo/bar/whatever
localhost / place / foo / index.php / bar /无论应该重定向到localhost / place / foo / bar /等等 localhost / place / foo / index / bar /还应该重定向到localhost / place / foo / bar /等等
如何使用.htaccess完成此操作?
更新后的代码: 这里的一切都有效除了: index.php不会从URL中的任何位置删除。
以下是代码:
<IfModule mod_rewrite.c>
RewriteEngine On
DirectorySlash Off
# Remove WWW
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=302,L]
# Remove Trailing Slashes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^ %1 [R=302,L]
# Reroute to index.php
#RewriteCond $1 !^(index\.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?cURL=/$1 [L,QSA]
</IfModule>
答案 0 :(得分:2)
将mod_rewrite规则与mod_alias规则混合使用并不是一个好主意。请尝试更新.htaccess
:
<IfModule mod_rewrite.c>
RewriteEngine On
DirectorySlash Off
# Remove WWW
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=302,L]
# Remove Trailing Slashes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^ %1 [R=302,L]
# remove index.php
RewriteCond %{THE_REQUEST} /index\.php[\s?/] [NC]
RewriteRule ^(.*?)index\.php(/.*)?/?$ /$1$2 [L,R=301,NC,NE]
# Reroute to index.php
RewriteCond $1 !^(index\.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?cURL=/$1 [L,QSA]
</IfModule>
答案 1 :(得分:1)
确保在服务器上进行mod重写尝试
RewriteEngine on
RewriteCond $1 !^(index\.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
答案 2 :(得分:0)
你可以这样使用
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]