WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a file in my theme's folder called "test.php".

If I go to www.mysite.com/wp-content/themes/my-theme/folder/test.php the theme loads which I assume is a 404 error handled by WP. If I change the file name to be test.html I can access it no problem.

I tried adding the following code to my functions.php file (to add a rewrite rule):

add_rewrite_rule( 'test.php$', $relative_directory . '/folder/test.php [L]', 'top' );

but even having the htaccess rule didn't seem to do anything.

Any idea what could be causing this?

share|improve this question
You shouldn't be loading php files directly in the first place. What exactly does the file need to do? There's likely a better way to handle it. – EAMann Jul 16 '12 at 17:39
I have a PHP file that I use to go get some data from my database to serve via ajax but right now going to that file does nothing but server a wordpress 404. – Gazillion Jul 16 '12 at 17:52
WordPress can get the data for you, and has built-in AJAX support. Using WP for data access gives you the added benefit of caching, sanitizing, escaping, and everything else you can use $wpdb for. – EAMann Jul 16 '12 at 19:09
How do you contain your ajax calls to your theme folder? I don't understand why it has to be taken out of it when everything else can be defined internally. – Gazillion Jul 17 '12 at 15:48
You register your ajax calls in functions.php using a filter. Then you make the call to admin-ajax.php and WordPress passes it along. There's a plugin-based example in the Codex but it works the exact same way for themes. – EAMann Jul 17 '12 at 16:29

Assuming you use the correct URL to access the file, everything is being handled in your web server level and WP doesn't run at all, so WP based solutions like changing rewrite rules will not help you.

It is most likely that there is some web server configuration that sends the 404 for any access to a php file at that folder (guess you should try if other php files there also return 404). You might be able to fix the web server configuration to match your needs, but as @EAMann commented, it is not the right way to write ajax for WP.

share|improve this answer

Are you using RewriteRules in your .htaccess file? You should be able to access PHP files directly then. The first two lines with a RewriteCond make sure the rewrite to WordPress’ index.php does not happen if the file or directory exists.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /your-wp-site/index.php [L]
share|improve this answer
I wrote that line at the bottom of the .htaccess file and it broke the rest of the site. I can't say I really understand why, I'm a little perplexed :-/ – Gazillion Jul 16 '12 at 17:51

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.