Php 如何重新写入链接,使用“重新写入”;。“htaccess”;,在子文件夹中?

Php 如何重新写入链接,使用“重新写入”;。“htaccess”;,在子文件夹中?,php,apache,.htaccess,Php,Apache,.htaccess,我有一个网站,结构如下:http://example.com/-/?id=1234。现在,我想编辑以下链接:http://example.com/-/1234 因此,我在http://example.com/-/;内容包括: RewriteEngine On RewriteRule ^/?-/([0-9]+)$ /index.php?id=$1 不幸的是,它总是显示:错误-500 我的.htaccess有什么问题 我的问题是而不是与任何现有问题重复 这是对子文件夹的访问权限 <If

我有一个网站,结构如下:
http://example.com/-/?id=1234
。现在,我想编辑以下链接:
http://example.com/-/1234


因此,我在
http://example.com/-/
;内容包括:

RewriteEngine On
RewriteRule ^/?-/([0-9]+)$ /index.php?id=$1
不幸的是,它总是显示:
错误-500


我的
.htaccess
有什么问题


我的问题是而不是与任何现有问题重复


这是对子文件夹的访问权限

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine on
    RewriteBase /foldername
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?$1 [L]
</IfModule>

选项+FollowSymLinks
重新启动发动机
重写基本/文件夹名称
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$index.php?$1[L]

您可以在/-/.htaccess中使用以下规则

RewriteEngine on
RewriteRule ^/?([0-9]+)$ /-/?id=$1 [L]
这应该起作用:

RewriteEngine On
RewriteRule ^-/([0-9]+)$ /-/?id=$1
它在我的测试服务器(Apache/2.4.6)上正确重写,下面是重写跟踪日志(为了清晰起见,启用了重定向):


根据您所写的内容,您的目录结构如下:

  "/" (root)
   |
   |___ "-" (directory)
         |
         |___ .htaccess
         |___ index.php
RewriteRule ^/?-/([0-9]+)$ /index.php?id=$1
然而,规则是:

  "/" (root)
   |
   |___ "-" (directory)
         |
         |___ .htaccess
         |___ index.php
RewriteRule ^/?-/([0-9]+)$ /index.php?id=$1
对于您指定的目录结构,除非您请求类似
url的url,否则该规则永远不会匹配http://www.example.com/-/-/123
(注意2级连字符)。这是因为
.htaccess
使用的路径与文件所在的位置相关,并且您已经声明它位于名为“-”的目录中。前导斜杠将而不是跳转匹配到根目录的URL,因为您允许它0或1次(?)它将被忽略,因此实际上,它正在从名为“-”的目录中查找名为“-”的目录

然后,如果你看一下你的重写实际上要去哪里,它不是去
/-/index.php
,而是去
/index.php
(域的根);前导的
/
将在重写时生效

如果索引和.htaccess文件位于docroot中,则该规则几乎是合理的

  "/" (root)
   |
   |___ .htaccess
   |___ index.php
。。。那个“-”目录实际上并不存在,但它只是被用作URL中的重写触发器

在这种情况下,您的重写规则应为:

RewriteRule ^-/([0-9]+)$ /index.php?id=$1


但是所有这些都不会导致HTTP 500错误-您还有一个问题没有告诉我们。

根据您的请求,这是您的服务器结构:

"/" (root)
|
|___ "-" (directory)
|
|___ .htaccess
|___ index.php

询问前搜索您是否仔细检查了配置?HTTP错误
500
505
?-它们的意思完全不同,
^/?-/
对我来说没有意义。为什么
在那里?您是否遵循了此apache教程?但它在戈达迪对我有效。请再次正确检查。@YeuSeChia 404错误代码与服务器上由重写规则指定的新位置的文件不匹配时存在。所以,检查它,再次检查它所有是的,它尝试匹配路径,你的函数中没有参数,所以它给出错误404。试着先纠正你的路线?id=1234不是路由请求,但/1234对于此请求,您应该定义路由检查您的服务器错误日志以了解有关500错误的信息,这不是由于重写规则造成的。。。。这是我半小时前得出的结论;)我想只有gotcha可以是一个递归重写循环——尽管这应该是
508