所以我试图获得一个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错误。如何改变它以做我想做的事?
答案 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
上下文中不需要重写模式中的前导斜杠。