1

好吧,标题真的很草率。

这是我的问题:我有一个新闻站点,当您转到主页 ( ) 时,它会在确定您的地理位置后将您domain.com重定向到。domain.com/news/top?geography=San_Francisco

我如何使用 .htaccess 使其从domain.com/news/top?geography=San_Francisco domain.com/San_Francisco/news/top ?

有一些类似的问题,但我没有找到一个足够相似的问题,因为您正在将 URL 编辑为更靠后的子目录。

还应该注意的是,我正在使用 PHP 的 Code Igniter 框架,它通常有它,domain.com/index.php/news/top?geography=San_Francisco但我已经做了一个 mod_rewrite 来摆脱index.php. 代码如下:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

我试过的代码:

RewriteRule ^([^/]+)/news/top$ /news/top?geography=$1 [L,QSA]
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
4

1 回答 1

0

在您拥有的 index.php 规则之前,尝试添加以下内容:

RewriteRule ^([^/]+)/news/top$ /news/top?geography=$1 [L,QSA]

您需要确保生成的链接是domain.com/San_Francisco/news/top虽然形式的。


但是要处理仍然看起来像旧方式的野外链接,您必须匹配实际请求:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /news/top\?geography=([^&]+)
RewriteRule ^news/top$ /%1/news/top? [L,R=301]

如果有人访问链接domain.com/news/top?geography=San_Francisco并使其成为 301 浏览器,这将重定向浏览器,因此浏览器的地址栏显示:domain.com/San_Francisco/news/top. 此时浏览器将发送另一个对第二个 URL 的请求,然后您使用上面的规则将其更改回带有查询字符串的那个。

于 2012-08-28T22:26:37.907 回答