2011-07-19 33 views
0

我想知道这是否可能。Apache mod_rewrite重定向,保留子目录名

我有一个单独的页面站点,我想在其中包含一个带有锚定到该站点上的某个节点的文件名的尾部斜线。我试图避免使用散列或哈希爆炸。

例如; www.example.com/recent

现在,我正在删除任何结尾的斜杠,但我得到了一个404,/recent,因为它期待着一个文件。

RewriteRule ^(.*)/$ /$1 [R=301,L] 

是否有可能重定向到www.example.com,但仍保持/recent没有服务器认为它是一个文件,所以我可以读取它的客户端(PHP/JS)?以便我可以继续使用后退和前进按钮。

感谢您的帮助!

回答

0

TBH它不是100%清楚我想要什么。据我所知,你想URL www.example.com/recent被重写(内部重定向,当浏览器中的URL保持不变)到www.example.com/index.php?page=recent(或类似的东西)。

DirectorySlash Off 
Options +FollowSymLinks -MultiViews 

RewriteEngine On 
RewriteBase/

# remove trailing slash if present 
RewriteRule ^(.*)/$ /$1 [R=301,L] 

# do not do anything for already existing files 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .+ - [L] 

# rewrite all non-existing resources to index.php 
RewriteRule ^(.+)$ /index.php?page=$1 [L,QSA] 

通过上述规则(需要放置在网站根文件夹的.htaccess中)可以实现。请求www.example.com/recent将被重写为www.example.com/index.php?page=recent,以便您的单页服务器端脚本知道请求了哪个URL。对于任何其他不存在的资源也是如此。 www.example.com/hello/pink/kitten =>www.example.com/index.php?page=hello/pink/kitten

无论如何,可能不需要将最初请求的URI作为page参数传递,因为您应该能够通过$_SERVER['REQUEST_URI']以PHP方式访问它。


如果我误解你了,这是不是你想要的,那么你必须明确你的问题(更多的细节更新,使声音清晰)。

+0

对不起,我措辞不佳,我很感激你花时间回答。你在那里有什么我正在寻找!我现在的问题是;在最后一条规则中没有R = 301--如果该人没有输入斜线,我应该担心吗?特别针对SEO或我的日志文件填写? – hybrid9

+0

如果用户输入带有斜线的URL(例如'www.example.com/recent /'),它将被重定向(301永久重定向)为“www.example.com/recent”(这将成为浏览器中可见的新URL ),然后将被默默地重写为'/index.php?page = recent'。正确的链接应该没有结尾斜杠。如果有人输入它,那么它将被删除与适当的搜索引擎优化友好的重定向代码。在上一条规则中,您不需要使用“R = 301”标志,因为它破坏了拥有漂亮URL('www.example.com/recent')的点。 – LazyOne

相关问题