我被困在一些似乎没什么可怜但又愚蠢的事情上 - 坚持使用.htaccess RewriteRule。
问题:
我正在尝试将所有来自“项目”网站“不存在”页面的流量重定向到index.php作为参数“q”。例如,假设用户已访问以下URL:
http://localhost/project/products/
现在显然没有名为products的目录或文件,因此,
对于上述HTTP请求,我想将其翻译为:
http://localhost/project/public/index.php?q=products
设置:
服务器 - 带有XAMPP的Apache 5.3.x. 目录结构:htdocs / project / public / index.php
我已尝试解决问题:
在项目目录>>中放置.htaccess文件http://localhost/project/
>>试图将所有流量转移到公共目录。对此的规则看起来像这样......
<IfModule mod_rewrite.c>
RewriteRule ^$ public/ [L]
</IfModule>
上面的内容正在运行,所有用户都被重定向到index.php页面。
使用以下代码在公共目录中放置另一个.htaccess文件:
<IfModule mode_rewrite.c>
RewriteCond....
RewriteCond....
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
现在,如果用户在栏中输入了网址:http://localhost/project/hi
我希望将其翻译为http://localhost/project/public/index.php?q=hi
而不是它给出了404错误。另请注意,转换为Apache的实际请求不应反映在URL栏中作为永久重定向[301]。
有人有解决方案吗?
答案 0 :(得分:1)
如果该文件 index.php 位于/ public /,那么
<IfModule mode_rewrite.c>
RewriteCond....
RewriteCond....
RewriteRule ^(.*)$ /project/public/index.php?q=$1 [L,QSA]
</IfModule>
答案 1 :(得分:1)
您的htaccess不在服务器根目录上。
然后,您必须定义基本网址,并使用完整路径作为重写规则:
RewriteEngine on
RewriteBase /project/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /project/public/index.php?q=$1 [L,QSA]