如何条件写入路径基于httaccess重写特定的PHP文件
问题描述:
我的要求是,当一个请求来到{{host}}/t1/batch
那个时候应该从其他batch.php的任何请求应的index.php读读。我的基地目录是t1
。我正在做一些htaccess的实验。我错过了正确的正则表达式。如何条件写入路径基于httaccess重写特定的PHP文件
RewriteBase /t1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(batch|index)/?$ $1.php [L,NC]
答
假设t1
是你的文档根目录的子目录,在/t1/.htaccess
把这个:
RewriteEngine on
RewriteBase /t1/
# no rewrites for real files and directories
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule^- [NS,L]
# batch
RewriteRule ^batch(?=$|/) $0.php [NS,L]
# everything else
RewriteRule ^(?!index\.php$). index.php [NS,L]
如果您有/.htaccess
任何重写,还有,你将需要忽略t1
子目录该文件的规则是这样的:
RewriteRule ^t1(?:$|/) - [L]
答
这可以用下面的规则来实现:
RewriteCond %{REQUEST_URI} ^/t1/batch/$
RewriteRule ^.*$ %{DOCUMENT_ROOT}/batch.php [L,NC,END]
RewriteRule ^.*$ %{DOCUMENT_ROOT}/index.php
我没有看到RewriteBase
这里的需要。
答
你可以得到它与以下行来完成:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/t1/batch/?$
RewriteRule ^(.*)$ batch.php [L,NC]
如果你有batch.php
下t1
目录和路径类似http://{host}/t1/batch.php
,你需要添加RewriteBase行:
RewriteBase /t1
如果你不会加RewriteBase行,你必须遵循的绝对路径,如:
RewriteRule ^.*$ /t1/batch.php [L,NC]
希望你能理解并得到了解决。
它工作的很完美。谢谢。 –