RewriteRule用于未知目录

时间:2016-01-19 13:06:11

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

所以我试图获得一个mod_rewrite规则,将请求重定向到带有.htaccess文件的php脚本。问题是,无论我将项目放在网络服务器上的什么位置,我都希望它能够工作(.htaccess文件和php脚本总是在同一个文件夹中)。

重写本身非常简单。如果脚本和.htacess位于目录/path/to/project中并且用户访问:

/path/to/project/somestring

应该改写为:

/path/to/project/index.php?t=somestring

这适用于网络服务器中任何级别的每个子目录。所以:

如果php脚本和.htaccess文件在根目录中:

/somestring2

应改写为:

/index.php?t=somestring2

如果php脚本和.htaccess文件位于/subdirectory

/subdirectory/somestring3

应改写为:

/subdirectory/index.php?t=somestring3

因此,无论项目在服务器中的位置如何,RewriteRule都应执行相同的重写操作。要成为GET参数的字符串可以包含以下字符:[a-zA-Z0-9]。如果请求的URL中还有其他GET参数,那么它们也应该被附加(因此QSA标志)。这就是我尝试过的:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*/)([a-zA-Z0-9])/? $1index.php&t=$2 [L,QSA] 

但是,这会导致404错误。如何改变它以做我想做的事?

1 个答案:

答案 0 :(得分:1)

尝试:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*/)?([A-Za-z0-9]+)/?$ /$1index.php?t=$2 [NC,L,QSA]

请注意,RewriteRule上下文中不需要重写模式中的前导斜杠。