我希望http://my_domain.com/forum/index.php/blah_blah_blah
不被重定向到任何地方。
但我想将http://my_domain.com/something_else_that_is_not_forum/blah_blah_blah
重定向到http://my_domain.com/index.php/something_else_that_is_not_forum/blah_blah_blah
因此,基本上,只有没有http://my_domain.com/forum/
前缀的所有内容都应重定向。
我有这个.htaccess
:
<IfModule mod_rewrite.c>
# Options +FollowSymLinks -Indexes
RewriteEngine On
RewriteBase /
#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteRule ^(?!forum.*)(.*)$ index.php/$2 [L,QSA]
</IfModule>
我认为正则表达式应该完全按照我想要的做,但是在这种情况下,我似乎错了。
http://www.getnocms.com/forum/index.php?action=admin;area=manageboards;sa=newcat;df105e678e9b=e1a979a0631bd203b6794debc16ceced
有人知道该怎么做吗?
编辑:
我用这个
<IfModule mod_rewrite.c>
# Options +FollowSymLinks -Indexes
RewriteEngine On
RewriteBase /
#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} !^\/forum
RewriteRule (?!^forum(?:/.*|)$)^(.*)$ /index.php/$1 [L,NC,QSA]
</IfModule>
粗略地说:
如果请求未指向文件或目录或符号链接(symbolic link),并且不是
/forum
,则如果它不是从论坛开始的,则指向/index.php/url。
看来是合乎逻辑的(嗯,我们实际上不需要
RewriteCond %{REQUEST_URI} !^\/forum
),但是在访问此url时仍然失败:http://www.getnocms.com/forum/index.php?action=admin;area=manageboards;sa=newcat;a5272d5=2fcf142818fc9df2aabb1364942a1d14
也许重写规则不适用于分号?我不确定。
最佳答案
您的规则几乎是正确的,但是需要一些小的更改。用以下代码替换代码:
<IfModule mod_rewrite.c>
# Options +FollowSymLinks -Indexes
RewriteEngine On
RewriteBase /
#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule (?!^forum(?:/.*|)$)^(.*)$ /index.php/$1 [L,NC]
</IfModule>
关于regex - 重写除特定模式以外的所有内容的规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16600917/