我一直试图让这个正确1或2个小时,寻找类似的问题并尝试解决方案。这可能是其中一个问题,答案非常明显。
我正在尝试重定向所有访问 domain.com/title/ 和 domain.com/title/ 其他页面 到PHP脚本,但是当我尝试访问该页面时,它给出了404错误。
我在htaccess文件中使用此代码:
RewriteEngine on
RewriteRule ^/plugins/(.*)$ /yourscript.php?plugin=$1 [L]
以下是我的.htaccess文件的完整副本。
ErrorDocument 404 /error/404.php
#Prevent full listing of files
Options -Indexes
#Redirect plugins
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/plugins/(.*)$ /foobar.php?plugin=$1 [NC,L]
</IfModule>
#Hide .php extension
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
</IfModule>
#compress
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
我尝试将foobar.php脚本放在根文件夹和文件夹名称插件中。
提前感谢您的帮助。
答案 0 :(得分:2)
看起来一切都在正确的位置,但您可能想尝试删除正则表达式中的前导斜杠(或至少使其成为可选):
RewriteRule ^/?plugins/(.*)$ /yourscript.php?plugin=$1 [L]
在htaccess文件中,apache在将其移交给htaccess文件中的规则之前删除了URI的前缀(前导斜杠)。
domain.com/plugins/ 无论是否正确重定向。但是,domain.com/ 插件也会定向到脚本。相反,我想拥有它,以便它指向文件夹名称“plugins”中的index.php文件
然后您需要将上述规则更改为:
RewriteRule ^/?plugins/(.+)$ /yourscript.php?plugin=$1 [L]
(注意*
更改为+
以匹配至少1个字符)。只要index.php
是有效索引,您可能不需要添加任何其他规则,这意味着如果您只是转到/plugins/
,apache将自动为index.php文件提供服务。