1

我已经尝试了 1 到 2 个小时来解决这个问题,寻找类似的问题并尝试解决方案。这可能又是答案非常明显的事情之一。

我正在尝试将所有访问domain.com/title/whatdomain.com/title/ anotherpage的人重定向到 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 脚本放在根文件夹和文件夹名称插件中。

预先感谢您的任何帮助。

4

1 回答 1

2

看起来一切都在正确的位置,但您可能想尝试删除正则表达式中的前导斜杠(或至少使其成为可选):

RewriteRule ^/?plugins/(.*)$ /yourscript.php?plugin=$1 [L]

在 htaccess 文件中,apache 在将 URI 的前缀(前导斜杠)交给 htaccess 文件中的规则之前会删除它。


domain.com/plugins/任何被正确重定向的东西。但是,domain.com/ plugins也会被定向到脚本。相反,我希望它指向文件夹名称“plugins”中的 index.php 文件

然后你需要把上面的规则改成:

RewriteRule ^/?plugins/(.+)$ /yourscript.php?plugin=$1 [L]

(注意*更改为 a+以匹配至少 1 个字符)。只要是有效的索引,您可能不需要添加任何更多规则index.php,这意味着如果您只是转到/plugins/apache 将自动服务器 index.php 文件。

于 2012-07-26T00:39:55.740 回答