2017-08-10 142 views
0

我见过几个答案,但他们都没有为我工作。难以使用.htaccess重写网址

如何使用我的.htaccess重写下面的内容? mod_rewrite在我的文件中。

http://example.com/local/vendor/index.php?handle=Company 

是:

http://example.com/local/vendor/Company 
+0

您需要**尝试自己编写代码**。在[**做更多的研究**之后](https://meta.stackoverflow.com/q/261592/1011527)如果你有问题**发布你已经尝试了**的**明确的解释不工作**并提供[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。阅读[如何问](http://stackoverflow.com/help/how-to-ask)一个很好的问题。请务必[参观](http://stackoverflow.com/tour)并阅读[this](https://meta.stackoverflow.com/q/347937/1011527)。 –

+0

周杰伦 - 我是新手编程,我只是想得到答案,所以我可以得到一个网站的生活。我期待像你这样的评论。感谢任何可以提供的帮助。 – greeves

+0

[参考:mod \ _rewrite,URL重写和“漂亮链接”可能的重复解释](https://stackoverflow.com/questions/20563772/reference-mod-rewrite-url-rewriting-and-pretty-links-explained ) –

回答

0

如何改写下面...

这里有可能是一个更根本的问题。你不要重写这样在.htaccess。您将从“朋友”URL重写为回到实际的URL /文件系统路径。所以,这是反过来,你重写来自:

http://example.com/local/vendor/Company 

到您的应用程序期待实际的URL:

http://example.com/local/vendor/index.php?handle=Company 

例如:

RewriteEngine On 

RewriteRule ^(local/vendor)/(Company)$ /$1/index.php?handle=$2 [L] 

$1$2是反向引用到RewriteRule模式中的被捕获组。

上面的内容只是你说的具体的URL,即。 /local/vendor/Company。我怀疑“公司”是想成为一个占位符?在这种情况下,你需要使这个更一般。例如:

RewriteRule ^(local/vendor)/(\w+)$ /$1/index.php?handle=$2 [L] 

\w是单词字符的简写字符类。这不包括点(即.),因此在重写为index.php时避免了重写循环。


UPDATE:以上假定您的.htaccess文件位于文档根目录,即。 example.com/.htaccess。但是,如果.htaccess文件位于/local子目录(即example.com/local/.htaccess。) - 当你出现在意见建议 - 那么你就需要调整上述指令从RewriteRule模式删除local/和删除斜杠前缀替代。例如:

RewriteRule ^(vendor)/(\w+)$ $1/index.php?handle=$2 [L] 
+0

感谢您的快速回复。我试过这个,但它仍然不起作用。也许我应该说“本地”是我的文档根。这会改变什么吗? 当我在浏览器中键入http:// localhost/local/vendor/Company时,它给了我404。它将替换为供应商处理 404我得到的是“在此服务器上找不到所请求的URL /本地/供应商/公司”。 – greeves

+0

术语问题的位数我认为......如果“本地”是您的_document root_(我的意思是您的“文档根目录”),那么它根本就不在您的URL中。 (文档根目录是定义公共文件根目录的文件系统路径 - 它是服务器配置中的配置指令。)如果“本地”仅仅是您从中提供文件的子目录,并且是该目录的位置。 htaccess'文件,那么你应该从上面的指令中删除'local /'。 – MrWhite

+0

我已经更新了我的答案。 – MrWhite