Stack Exchange 上有许多与 mod_rewrite 和 mod_alias 的 Apache 配置相关的问题,但我找不到我的问题的答案,所以这是另一个问题!;)
我将旧网站迁移到新位置。
文章过去可以通过 URL 访问,例如http://xxx/blog/index.php?post/YYYY/MM/DD/title
,因此通过现有网页有许多这种形式的链接。
现在,该 URL 应该是http://xxx/post/YYYY/MM/DD/title
,所以只需blog/index.php?
从最终 URL 中删除。
我想使用 mod_alias 和一个子句,但我在这里Redirect
读到该子句是在该子句之后解释的,这对我来说是个问题,因为我已经在使用一个条件。Redirect
RewriteRule
RewriteRule
这是我当前的 .htaccess 文件:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1
我试图以这种方式修改它:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^blog/index.php? / [R=301,L]
RewriteRule ^(.*)$ index.php?$1
它几乎可以工作,除了:
http://xxx/blog/index.php?post/YYYY/MM/DD/title
被重定向/重写到http://xxx/blog/?post/YYYY/MM/DD/title
(注意?
)所以它不起作用- 看起来这个新行搞乱了很多其他不以 /blog/index.php 开头的 URL?比如后端网址...
任何帮助都将受到欢迎!
编辑(2014-07-16):
如果我使用以下规则:
RewriteRule ^/?blog/index\.php(.*)$ /$1 [R=301,L]
然后去
http://xxx/blog/index.php?test
带我去
http://xxx/?test
哪个几乎是正确的(问号仍然是一个问题)!
但是当我尝试通过添加来匹配询问标记时\?
:
RewriteRule ^/?blog/index\.php\?(.*)$ /$1 [R=301,L]
然后它就停止工作了……去那里:
http://xxx/blog/index.php?test
把我留在那儿!
这是为什么?